package com.woniu108.carService.commos.util;


import cn.hutool.core.bean.BeanUtil;
import com.woniu108.carService.commos.dto.AdminSimpleDto;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;

import java.security.Key;
import java.util.Date;
import java.util.Map;

//JWT工具类
public class JWTUtil {
    //自定义的秘钥
    //HS256：即字节长度>=32
    static final String adminSecret = "ksaasfdasdfadsfwfrasdfsadffcasijfasadfasfdlkfjlasjflksajfd";
    static final String userSecret = "fashfiapoeaofneafneijoaiefewanfneawiofinafeafiiaofjeioaf";
    static final String storeAdminSecret="cmdaiogneaiioupewibnahwuidhbfeljafcnleaegeyauwuiugtrgvbnp";
//
//    //生成token
//    //键值对包含用户信息
//    //以分钟为单位的时间 代表jwt的有效时间
//    public static String createToken(Map<String, Object> body, Integer time, String secret) {
//        SecretKey key = Keys.hmacShaKeyFor(secret.getBytes());
//        JwtBuilder jb = Jwts.builder();
//        if (body == null || body.size() <= 0) {
//            throw new RuntimeException("没有数据");
//        }
//        jb.setClaims(body);
//        if (time == null) {
//            jb.setExpiration(new Date(System.currentTimeMillis() + 60 * 30 * 1000));
//        } else {
//            jb.setExpiration(new Date(System.currentTimeMillis() + time * 1000));
//        }
//        return jb.signWith(key).compact();
//    }
//
//    public static String createToken(Map<String, Object> body, String secret) {
//        return createToken(body, null, secret);
//    }
//
//    //解析token
//    public static Claims parseToken(String token, String secret) throws Exception {
//        if (token == null) {
//            throw new RuntimeException("token为空");
//        }
//        SecretKey key = Keys.hmacShaKeyFor(secret.getBytes());
//        return Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody();
//    }
//
//    //生成user端token
//    public static String createUserToken(Map<String, Object> body) {
//        return createToken(body, userSecret);
//    }
//
//    public static String createUserToken(Object... body) {
//        if (body == null || body.length <= 0) {
//            throw new RuntimeException("没有主体数据");
//        }
//        Map<String, Object> maps = new HashMap<>();
//        for (int i = 0; i < body.length; i += 2) {
//            Object value = null;
//            if (i + 1 < body.length) {
//                value = body[i + 1];
//            }
//                maps.put(body[i].toString(), value);
//        }
//        return createToken(maps, userSecret);
//    }
//
//    //生成admin端token
//    public static String createAdminToken(Map<String, Object> body) {
//        return createToken(body, adminSecret);
//    }
//
//    public static String createAdminToken(Object... body) {
//        if (body == null || body.length <= 0) {
//            throw new RuntimeException("没有主体数据");
//        }
//        Map<String, Object> maps = new HashMap<>();
//        for (int i = 0; i < body.length; i += 2) {
//            Object value = null;
//            if (i + 1 < body.length) {
//                value = body[i + 1];
//            }
//            maps.put(body[i].toString(), value);
//
//        }
//        return createToken(maps, adminSecret);
//    }
//
//
//    public static Claims parseUserToken(String token) throws Exception {
//        if (token == null) {
//            throw new RuntimeException("token为空");
//        }
//        SecretKey key = Keys.hmacShaKeyFor(userSecret.getBytes());
//        return Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody();
//    }
//
//    public static Claims parseAdminToken(String token) throws Exception {
//        if (token == null) {
//            throw new RuntimeException("token为空");
//        }
//        SecretKey key = Keys.hmacShaKeyFor(adminSecret.getBytes());
//        return Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody();
//    }
//
//
    //测试用（生成token）
//    public static void main(String[] args) {
//        AdminSimpleDto dto=new AdminSimpleDto();
//        dto.setAdminRoleName("超级管理员");
//        dto.setAdminPhone("18623407992");
//        dto.setAdminName("111");
//        Map<String, Object> map = BeanUtil.beanToMap(dto);
//        String refreshToken=JWTUtil.createAdminToken(map,3*24*60);
//        System.out.println("refreshToken:"+refreshToken);
//        String adminPhone=JWTUtil.parseAdminToken(refreshToken).get("adminPhone").toString();
//        System.out.println("adminPhone:"+adminPhone);
//    }
public static String createUserToken(Map<String, Object> body, Integer mil) {
    Key key = Keys.hmacShaKeyFor(userSecret.getBytes());
    return Jwts.builder()
            .setClaims(body)
            .setExpiration(new Date(System.currentTimeMillis() + mil * 60 * 1000))
            .signWith(key)
            .compact();
}
    //解析token
    public static Claims parseUserToken(String token) {
        Key key = Keys.hmacShaKeyFor(userSecret.getBytes());
        return Jwts.parserBuilder().setSigningKey(key)
                .build().parseClaimsJws(token).getBody();
    }

    public static String createAdminToken(Map<String, Object> body, Integer mil) {
        Key key = Keys.hmacShaKeyFor(adminSecret.getBytes());
        return Jwts.builder()
                .setClaims(body)
                .setExpiration(new Date(System.currentTimeMillis() + mil * 60 * 1000))
                .signWith(key)
                .compact();
    }
    //解析token
    public static Claims parseAdminToken(String token) {
        Key key = Keys.hmacShaKeyFor(adminSecret.getBytes());
        return Jwts.parserBuilder().setSigningKey(key)
                .build().parseClaimsJws(token).getBody();
    }



    public static String createStoreAdminToken(Map<String, Object> body, Integer mil) {
        Key key = Keys.hmacShaKeyFor(storeAdminSecret.getBytes());
        return Jwts.builder()
                .setClaims(body)
                .setExpiration(new Date(System.currentTimeMillis() + mil * 60 * 1000))
                .signWith(key)
                .compact();
    }
    //解析token
    public static Claims parseStoreAdminToken(String token) {
        Key key = Keys.hmacShaKeyFor(storeAdminSecret.getBytes());
        return Jwts.parserBuilder().setSigningKey(key)
                .build().parseClaimsJws(token).getBody();
    }



}
